<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
var obj1 = {
    name: '张三',
    age: 23,
    sex: '女'
}
// Object.defineProperty()一次只能定义一个属性
// Object.defineProperty(obj1,'sex',{// 属性描述符
//     configurable: true,
//     enumerable: true,
//     writable: true,
//     value: '女'
// })

// Object.defineProperties()一次可以定义多个属性
Object.defineProperties(obj1,{
    'name': {// 属性描述符
        configurable: true,
        enumerable: true,// 可枚举
        writable: true,
        value: '张三'
    },
    'sex': {// 属性描述符
        configurable: true,
        enumerable: true,// 可枚举
        writable: true,
        value: '女'
    },
    'age': {// 属性描述符
        configurable: true,
        enumerable: false,// 不可枚举
        writable: true,
        value: 23
    }
})


// Object.keys(obj)返回obj对象所有可枚举属性的数组
// console.log( Object.keys(obj1) );// ['name','sex']

// Object.getOwnPropertyNames(obj)返回obj对象所有自身属性的数组(包含不可枚举属性)
// console.log( Object.getOwnPropertyNames(obj1) );// ['name', 'age', 'sex']

// Object.create(prototype,descriptor)创建一个空对象，并指定该对象的原型和属性描述符
// prototype 创建的新对象的原型对象，必填，如没有则填null
// descriptor 对象的属性描述符，可选
var obj2 = Object.create(null);// 创建一个空对象
var obj3 = new Object();// 创建一个空对象
var obj4 = Object.create(obj1);// 创建一个空对象
console.log( obj2 );// {} 没有原型
console.log( obj3 );// {} 有原型
console.log( obj4 );// {} 有原型
console.log( obj4.__proto__ === obj1 );// true

var obj5 = Object.create(obj1,{
    name: {
        configurable: true,
        enumerable: true,
        writable: true,
        value: '李四'
    },
    age: {
        configurable: true,
        enumerable: true,
        writable: true,
        value: 24
    },
})
console.log( obj5 );// {name: '李四', age: 24}


// Object.getPrototypeOf(obj)返回obj的原型对象
console.log( Object.getPrototypeOf(obj3) );// Object.prototype
console.log( Object.getPrototypeOf(obj4) );// obj1
console.log( Object.getPrototypeOf(obj5) );// obj1

</script>
</body>
</html>